home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
earcd
/
assembler
/
progasm1.lha
/
LEZIONI
/
LEZIONE4.TXT
< prev
next >
Wrap
Text File
|
1994-10-30
|
45KB
|
905 lines
CORSO DI ASSEMBLER - LEZIONE 4
In questa lezione impareremo a visualizzare delle figure in varie risoluzioni
tramite la copperlist. Fino ad ora abbiamo potuto cambiare solo il colore0,
ossia il $dff180, con cui abbiamo fatto delle sfumature, ma chiaramente le
figure non si fanno a forza di WAIT!!! Per visualizzare una normale figura IFF,
creata col Deluxe Paint, Digitalizzata, scannerizzata o renderizzata con un
programma di ray tracing quali Imagine o Real 3d non serve alcun WAIT!!!!
Basta dire al copper che risoluzione grafica ha la figura (numero di colori,
risoluzione hires o lowres, interlacciata o meno) tramite il registro BPLCON0,
ossia il $dff100, che per ora abbiamo sempre mantenuto col valore $200, che
indica: SOLO IL COLORE DI SFONDO SENZA IMMAGINI IN "SOVRAIMPRESSIONE".
E' per questo che se in una copperlist del genere cambiamo ad esempio il
color1, ossia $dff182, non accade nulla: perche' non e' abilitato nessun
BITPLANE, ossia "piano di bit", ma solo lo "SFONDO", il cui colore puo' essere
cambiato col $dff180. Dopo aver definito il numero di colori e la risoluzione
grafica (ad esempio 320x200 pixel, dove per PIXEL si intende ognuno dei piccoli
punti che compongono la figura), avendo indicato dove si trova la figura da
visualizzare mettendo il suo indirizzo negli appositi PUNTATORI (registri come
il $dff080 (COP1LC) dove invece viene messo l'indirizzo dei bitplane), bisogna
definire i colori della figura, ossia la PALETTE ( cioe' la "TAVOLOZZA" dei
colori definita dal programma di disegno (es. DeLuxe Paint) per la figura
in questione), oppure la figura apparira' con i colori sbagliati.
In pratica dobbiamo mettere in copperlist i registri colore necessari, se
la figura e' a 4 colori dobbiamo definire i 4 colori:
dc.w $180,$xxx ; color 0
dc.w $182,$xxx ; color 1
dc.w $184,$xxx ; color 2
dc.w $186,$xxx ; color 3
Questo pezzo di copperlist comunque lo salva direttamente il KEFCON
Ci sono anche altri REGISTRI che regolano la dimensione della figura per
farla di dimensioni "SPECIALI", come l'OVERSCAN che la rende piu' grande, o
si puo' fare una "finestrella" che occupi solo una parte dello schermo.
Altri registri speciali sono i MODULI, usati spesso per gli effetti di
allungamento delle figure. Nei primi esempi comunque manterremo i registri
speciali azzerati o comunque con i valori normali per visualizzare una
figura. Innanzitutto deve essere chiaro che c'e' differenza tra un file IFF,
ossia una figura nel formato standard caricabile dal DeLuxe Paint, e la
figura REALE (detta RAW o BITMAP) che sta in memoria e viene visualizzata dal
copper. Nel disco e' presente un programmino capace appunto di convertire
figure in formato IFF nel formato RAW indispensabile per visualizzare le
figure direttamente con il COPPER. Le figure in realta' sono composte di molti
0 ed 1, come tutti i dati BINARI in memoria. Abbiamo gia' visto che ogni dato
in memoria e' composto di BIT, ossia di zeri e di 1, che sono gli unici 2 stati
possibili della memoria (essendo possibile solo PASSAGGIO DI CORRENTE e ASSENZA
DI CORRENTE); per comodita' usiamo il sistema decimale e esadecimale, ma la
realta' e' sempre quella dei BIT. Allora come e' possibile visualizzare una
figura a 32 colori quando i bit possono essere solo 0 ed 1??? Se mettessimo in
memoria una specie di foglio di carta a quadretti con dei quadretti anneriti
(ossia 1) ed altri bianchi (ossia zero) potremmo solamente lavorare con 2
colori, il nero e il bianco, come i vecchi computer con i monotor a fosfori
verdi che potevano visualizzare solo il colore di sfondo (i bit a zero) e
certi disegni o parole fatte di bit accesi (ad 1).
Con il COPPER si puo' anche operare in questo modo, a 2 colori, basta ACCENDERE
UN SOLO BITPLANE. In questo caso dovremo mettere in memoria la figura RAW,
composta similmente al foglio di carta millimetrata descritto prima, con dei
punti "accesi" e dei punti "spenti". Fino qui tutto dovrebbe essere chiaro:
e' come fare la battaglia navale! Una nave sarebbe per esempio fatta di un
certo numero di PIXEL (punti), allo stesso modo si puo' fare qualsiasi cosa:
UN UOMO: UN AEREO (ho risparmiato gli zeri!)
11
000011100000 000001100000 1111
000001000000 000010010000 1111
000111111000 000010010000 111111111111111111111
000101101000 000111111000 1111111111111111111111111
000101101000 000100001000 1111
000011110000 000100001000 1111
000010010000 111111
000010010000 UNA "A" 11111111
000010010000
000110011000
Quando la figura e' grande conviene chiaramente farsela col programma di
disegno o scannerizzarla, poi convertirla in RAW (0000110101...) col programma
in questo disco (KEFCON). Per definire il colore di sfondo (gli zeri) bastera'
mettere un dc.w $180,$000 (nero), per definire il colore degli 1 bastera'
mettere un dc.w $182,$0f0 (verde).
Per le figure a piu' colori il trucco e' questo: i vari BITPLANES, ossia PIANI
di BIT (0001010 ecc.) vengono "SOVRAPPOSTI" in una specie di TRASPARENZA,
per cui dove vengono sovrapposti due "1" appare un certo colore, dove sono
sovrapposti tre "1" appare un altro colore eccetera. Tutto questo non va
calcolato!!! Basta caricarsi la figura con l'Iffconverter e salvarla in RAW,
poi mettere il numero dei colori e la risuluzione nel $dff100 (bplcon0), dire
al copper dove abbiamo messo la figura RAW, mettere i colori giusti (che
salva direttamente l'iffconverter separatamente), e la figura appare senza
problemi. L'importante e' aver chiaro il procedimento, in pratica poi per
convertire l'immagine IFF in RAW e modificare il sorgente ci vogliono due
minuti.
Innanzitutto chiariamo cosa fa l'iffconverter (nel nostro caso usiamo quello
chiamato KEFCON, che potete caricare spostando la finestra dell'asmone e
scrivendo nel MENU del DOS il suo nome; esistono iffconverters piu' recenti e
con piu' opzioni, alcune delle quali spesso inutili, ma per ragioni di spazio
e di compatibilita' con kickstart 1.3 ho deciso di mettere questo nel corso,
poi c'e' anche il fatto che e' programmato usando i registri hardware anziche'
il sistema operativo, dunque e' in linea col corso. Se volete usare altri
iffconverters fate pure, ma prima imparate ad usare questo, che e' stato usato
per fare giochi e demo gloriosi). Una immagine nella realta' abbiamo
visto che e' un insieme di piani di bit, piu' piani per piu' colori, un piano
solo per 2 colori. Abbiamo anche visto che per essere visualizzata servono
i colori giusti (la palette) e la risoluzione giusta nel $dff100 (bplcon0); i
programmatori dell'Amiga decisero di creare un formato particolare per
memorizzare le figure e trasferirle da un programma all'altro: questo formato
per l'Amiga e' l'IFF ILBM, ed e' in pratica composto da i bitplanes compattati
con una certa routine per prendere meno spazio, con attaccata la palette e
la risoluzione; un programma quando carica un immagine IFF scompatta i PIANI
compattati, mette la palette a posto nei registri dei colori ($dff180,$dff182,
$dff184 eccetera) e la risoluzione nel $dff100, il BPLCON0 (Sommariamente).
Allo stesso modo quando ha una immagine in memoria, per salvarla in IFF deve
comprimere i BITPLANES nel formato IFF, attaccarci la palette e il resto.
L'Iffconverter fa queste operazioni: puo' caricare un RAW, e salvarlo in IFF,
a patto che gli si dia la PALETTE e la RISOLUZIONE giusta, oppure puo'
caricare un immagine IFF e salvarla in RAW, e puo' salvare la PALETTE gia
nel formato dc.b $180,xxx,$182,xxx, ossia la PALETTE gia' da inserire nella
copperlist. In altri computer si utilizzano diversi formati per le figure,
ad esempio il GIF, il PCX e il TIFF sono usati dai PC MSDOS; oltre ad essere
diversamente COMPRESSE le figure RAW+PALETTE, in questi computer e' diverso
anche il sistema di visualizzazione, infatti hanno il sistema CHUNKY anziche'
bitplane, un sistema utile quando si debbono gestire 256 colori, ma meno
capace di quello Amiga per quanto riguarda gli SCROLL (scorrimenti) e senza
possibilita' di cambiare la PALETTE come fa il COPPER con i WAIT.
Le possibili risoluzioni grafiche dell'Amiga normale (non AGA) sono queste:
320x256 PIXEL detta LOW RES (bassa risoluzione)
640x256 PIXEL detta HIGH RES (alta risoluzione)
L'immagine puo' essere anche piu' lunga (312 linee in overscan) oppure lunga
il doppio (tramite l'interlace che pero' causa uno sfarfallamento).
Anche la larghezza puo' essere leggermente aumentata con l'OVERSCAN.
Le immagini in LOW RES (larghe 320 pixel) possono avere fino ad un massimo
di 32 colori, ci sono poi 2 modi speciali detti EHB (Extra Half Bright) e
HAM (Hold And Modify) che visualizzano rispettivamente 64 e 4096 colori, ma
hanno delle limitazioni particolari che vedremo.
Le immagini in HIGH RES (alta risoluzione) possono avere un massimo di 16
colori e non dispongono di modi speciali.
I giochi sono quasi tutti in LOW RES, per sfruttare il maggior numero di colori
disponibili, per il risparmio di memoria (che purtroppo FINISCE!), e per la
maggiore velocita' raggiungibile (infatti l'HIGH RES rallenta le operazioni
maggiormente del LOW RES, inoltre bisognerebbe spostare pezzi piu' grandi di
memoria essendo l'immagine larga il doppio!).
Analizziamo la tecnica di visualizzazione dei colori: abbiamo detto che il
massimo dei colori in lowres e' 32 (senza contare i modi speciali); e'
possibile scegliere una risoluzione video con 2,4,8,16 o 32 colori. Questo
perche' sono determinati dalla sovrapposizione di BIT, dunque ogni bitplane
che "SOVRAPPONIAMO" aggiungiamo 2 bit ad ogni "PIXEL" che diventa "PIU'
PROFONDO" di 2 bit: ora con 2 bit si puo' ottenere soltanto 0 ed 1, ossia
2 colori, allora la risoluzione 320x200 a 2 colori avra' un solo BITPLANE,
come abbiamo gia' detto. Aggiungendo un altro bitplane i colori possibili
diventano 4, infatti si possono verificare 4 situazioni di sovrapposizione
per ogni PIXEL: 00,01,10,11 ossia "entrambi i bit a zero", "primo bitplane a
zero e secondo ad 1", "primo bitplane ad 1 e secondo a zero", "entrambi i
bitplane ad 1". Aggiungendo un altro bitplane si possono verificare 8
situazioni diverse (corrispondenti a 8 colori diversi):
000,001,010,011,100,101,110,111 (3 bitbplanes=3 bit per PIXEL=8 possibilita')
Aggiungendo un bitplane, il quarto, arriviamo ad 4 bit possibili per PIXEL,
ossia 16 diverse possibilita' per 16 colori:
0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111
Lo stesso vale per il quinto bitplane, che porta a 5 il numero di bit per
pixel, ossia 32 colori possibili. Dunque ogni bitplane eleva alla seconda il
numero dei colori:
0 bitplane = solo il colore di sfondo COLOR00 ($dff180), 1 COLORE
1 bitplane = 2 COLORI
2 bitplane = 4 COLORI (2*2, ossia 2 alla seconda)
3 bitplane = 8 COLORI (2*2*2, ossia 2 alla terza)
4 bitplane = 16 COLORI (2*2*2*2, ossia 2 alla quarta)
5 bitplane = 32 COLORI (2*2*2*2*2, ossia 2 alla quinta)
L'Amiga ha 32 registri per i 32 colori possibili in LOWRES, che partono dal
COLOR0 per arrivare fino al COLOR31 (la numerazione parte contando lo zero come
per i bit). Il color0 e' il $dff180, seguito dagli altri:
$dff182 = COLOR1
$dff184 = COLOR2
$dff186 = COLOR3
$dff188 = COLOR4
$dff18a = COLOR5
eccetera...
per esempio se un pixel di una immagine lowres a 16 colori e' del colore
dello "SFONDO", ossia del COLOR0, modificabile agendo sul $dff180, vuol dire
che tutti e 4 i bitplanes sono a zero: 0000, mentre un pixel che ha il colore
32, detto COLOR31, sara' il risultato di questa combinazione binaria: 1111.
Gli altri colori sono il frutto delle altre combinazioni. L'amiga 1200 dispone
di 8 bitplanes al massimo con il suo CHIPSET AGA, infatti puo' generare 256
colori (2 all'ottava=256), infatti nei programmi grafici AGA si possono
scegliere anche risoluzioni con 64 colori (6 planes), 128 colori (7 planes).
Una schermata video e' detta anche PLAYFIELD.
Vediamo di calcolare quanta memoria occupa una figura a 2 colori in 320*256:
ogni linea ha 320 pixel, essendo un byte composto di otto bit, in una linea ci
sono 40 byte (infatti 8*40=320). Allora bastera' moltiplicare 40, ossia il
numero di byte per linea, per il numero delle linee, cioe' 256: 40*256=10240.
Dunque un bitplane in lowres occupa 10240 bytes. Allora possiamo calcolare
anche una figura con 4 colori, ossia 2 bitplanes: 40*256*2=20480.
Dunque per una figura in LOWRES standard basta moltiplicare 40*256*bitplanes.
Stabilito che in LOWRES ci sono 320 bit per linea, ossia 40 bytes, in HIRES
essendo largo il doppio ci saranno 80 bytes per linea: 80*256*bitplanes.
In definitiva, la formula generale per calcolare la grandezza e':
Byte per linea * linee del playfield * numero bitplane
Analizziamo ora il BPLCON0, il registro dove va indicata la risoluzione e
il numero dei colori: ( Potete leggere un riassunto scrivendo "=C 100" )
$dff100 - BPLCON0
Bit Plane Control Register 0 (1 word, ossia 16 bit, dallo 0 al 15)
NUMERO DEL BIT (nota: bit ad 1 = ON, bit a 0 = OFF)
15 - HIRES Modo hires (1=640x256 , 0=320x256)
14 - BPU2 \
13 - BPU1 ) 3 bit per scegliere il numero di bitplanes
12 - BPU0 /
11 - HOMOD Hold And Modify mode (HAM 4096 colori)
10 - DBLPF Double playfield
09 - COLOR video composito (per il GENLOCK)
08 - GAUD Genlock audio
07 - X
06 - X
05 - X
04 - X
03 - LPEN Lightpen (Penna ottica)
02 - LACE Interlacciato (320x512 o 640x512)
01 - ERSY External resync (Per il GENLOCK)
00 - X
Questo registro e' BITMAPPED, ossia ogni suo bit ha una funzione:
- Il bit 15 abilita il modo hires: questo modo grafico visualizza 640 pixel
per linea orizzontale invece di 320. Ricordatevi di mettere DDFSTART/STOP
a $003c e $00d4 anziche $0038 e $00d0, altrimenti non verranno visualizzate
le prime linee del bordo sinistro!
- I bit 14-12 servono a stabilire il NUMERO di plane da accendere, NON quali
plane; infatti i bit sono 3 ed i plane possibili sono 6.
Qui bisogna scrivere QUANTI plane da accendere, proprio come un numero, NON
selezionando QUALI. Es.: '3', '0', '6'.
In 3 bit, infatti, sono esprimibili 8 numeri, dallo 0 al 7.
Ripeto: LAVORATE CON UN NUMERO VERO E PROPRIO IN BINARO A 3 BIT, NON CON
SINGOLI BIT DA ACCENDERE O SPENGERE, A DIFFERENZA DEGLI ALTRI BIT !
N.B.: Scrivendo '0' (=%000) si spengono tutti i plane, scrivendo %101 se
ne accendono 5; con 6 plane si attiva l' HALF-BRIGHT mode a 64 colori.
- Il bit 11 serve ad azionare il modo HAM (vanno accesi 6 plane)
L' HAM consente agli amiga normali di visualizzare 4096 colori, l' HAM8
permette agli Amiga 1200/4000 di visualizzarne 262144.
- Il bit 10 consente di attivare il modo Dual PlayField, uno speciale modo
a 2, 4 o 6 plane che permette di creare due schermi da 1, 2 o 3 plane
ciascuna, chiamati PlayField1 e PlayField2, accavallati l' uno sull' altro
in trasparenza renedendo trasparente il colore 0 del PlayField sovrastante.
E' possibile creare, quindi, un effetto parallattico simile a quello presente
in molti giochi. Per esempio, si potrebbe utilizzare un PlayField a 3 plane
(8 colori) per l' area di gioco ed un altro PlayField di sfondo, che magari
scrolla (scorre) piu' lentamente per dare un maggiore senso di profondita',
raffigurante pianure e montagne.
Appena settato il bit i plane dispari (1,3,5) formano in playfield1, mentre
quelli pari (2,4,6) il secondo: l' hardware, appena attivato il bit DPF,
raggruppa cosi' i plane per poterli rendere indipendenti, dato che, come
vedremo, esistono registri di scroll ed altri che distinguono parametri
per plane pari e dispari, usati anche per controllare indipendentemente
due interi playfield in dual mode !
N.B.: Il modo DualPlayField consente di sovrapporre solo 2 schermi e, comunque,
di analoga risoluzione grafica (es.: Hires+Hires, Lowres+Lowres, ecc...).
- Il bit 9 serve ad attivare anche l' uscita videocomposita degli Amiga posta
accanto a quella RGB del monitor. Personalmente, la attivo sempre per
consentire di vedere qualcosa sul monitor durante i miei prodotti anche a
chi non possiede un monitor RGB standard. SETTATELO SEMPRE AD 1.
- Il bit 8 attiva l' audio di un eventuale genlock collegato all' Amiga: non
serve praticamente a niente, sorvoliamo.
- Il bit 7 e' usato solo dai chipset evoluti dell'A1200, su amiga normale non
ha funzioni. Ricordatevi comunque di lasciare sempre a zero questi bit
inutilizzati, altrimenti su a1200 rischiate di compromettere il funzionamento
del vostro demo/gioco/programma.
- Il bit 6 non ha funzioni su amiga normale, lasciatelo a zero.
- Il bit 5 lasciatelo a zero
- Il bit 4 lasciatelo a zero
- Il bit 3 serve a far ricevere le coordinate della penna ottica nei registri
VHPOS ($dff006) e VPOS ($dff004) del pennello elettronico. La penna ottica
su Amiga non e' utilizzata quasi mai, non interessa questa opzione.
- Il bit 2 imposta il modo InterLace, che consente la visualizzazione di
una videata con doppia risoluzione verticale, ma interlacciata. (512 linee)
Vedremo in seguito come funziona questa modalita'
- Il bit 1 serve a sincronizzare il movimento del pennello con la frequenza
di qualche apparecchio esterno all' Amiga, dunque lasciatelo sempre a zero.
- Il bit 0 lasciatelo a zero
Detto questo facciamo degli esempi sull' uso del $100 (BPLCON0) in copperlist:
; 5432109876543210
dc.w $100,%0100001000000000 ; ---> 4 plane in Lowres (320x256)
dc.w $100,%1011001000000100 ; ---> 3 plane in Hires+Interlace (640x512)
dc.w $100,%0110001000000100 ; ---> 6 plane in HALF-BRIGHT Lowres+Lace
dc.w $100,%0110101000000000 ; ---> 6 plane in HAM lowres (4096 colori)
dc.w $100,%0110011000000000 ; ---> DualPlayField 3+3 plane in Lowres
dc.w $100,%1100011000000100 ; ---> DualPlayField 2+2 in Hires+interlace
Nella lezione 3 abbiamo usato il BPLCON0 nella copperlist dandogli valore $200:
dc.w $100,$200
Infatti abbiamo settato solo il bit 9, che serve per attivare il genlock:
; 5432109876543210
dc.w $100,%0000001000000000
Il genlock e' un apparecchio che serve per mettere in sovraimpressione
titoli o grafica fatta con l'amiga su video televisivi, quindi chi non
ha questo accessorio non vede cambiamenti tra una copperlist con il bit 9
attivato ed una con il bit disattivato, ma conviene tenerlo sempre ad 1, per
chi volesse usare il genlock con le nostre copperlist, e perche' il vecchio
Amiga 1000 ha una uscita videocomposita per il monitor a colori.
Dunque avremmo avuto lo stesso risultato in RGB anche con un dc.w $100,0.
Come vedete, i bitplane sono ZERO, dunque c'e' solo il colore di sfondo senza
figure in sovraimpressione. Per "ACCENDERE" dei bitplane basta mettere il
numero di bitplanes che vogliamo, in binario, nei bit 12,13,14 del registro.
Per esempio, per fare uno schermo con 1 bitplane (2 colori): (320x256!)
; 5432109876543210
dc.w $100,%0001001000000000 ; BPLCON0 - bit 12 acceso!! (1 = %001)
*
Per uno schermo a 2 bitplanes: (4 colori)
; 5432109876543210
dc.w $100,%0010001000000000 ; BPLCON0 - bit 13 acceso!! (2 = %010)
*
Per uno schermo a 3 bitplanes: (8 colori)
; 5432109876543210
dc.w $100,%0011001000000000 ; bits 13 e 12 accesi!! (3 = %011)
*
Per uno schermo a 4 bitplanes: (16 colori)
; 5432109876543210
dc.w $100,%0100001000000000 ; BPLCON0 - bit 14 acceso!! (4 = %100)
*
Per uno schermo a 5 bitplanes: (32 colori)
; 5432109876543210
dc.w $100,%0101001000000000 ; bits 14,12 accesi!! (5 = %101)
*
Per uno schermo a 6 bitplanes: (per modi speciali EHB e HAM 4096 colori)
; 5432109876543210
dc.w $100,%0110001000000000 ; bits 14,13 accesi!! (6 = %110)
(In questa modalita' se non si mette ad 1 il bit dell'HAM (11) lo schermo
e' in Extra Half Bright, se il bit 11 invece e' settato lo schermo e' HAM.
*
Dunque basta mettere il numero di bitplanes richiesto nei 3 bit 12,13,14
del registro. Se si desidera uno schermo in hires, largo 640 pixel anziche'
320, bastera' mettere ad 1 il bit 15, il primo a sinistra, RICORDANDOSI che
il massimo numero di bitplanes in HIRES e' 4 (16 colori), e che bisogna
cambiare il DFFSTART ($dff092) e il DFFSTOP ($dff094) rispetto al LOWRES:
dc.w $92,$003c ; DdfStart HIRES normale
dc.w $94,$00d4 ; DdfStop HIRES normale
Lo stesso vale per l'interlacciato (lunghezza 512 linee anziche' 256), basta
mettere ad 1 il bit 2.
Una volta impostato correttamente il BPLCON0, bisogna dire dove sono i bitplane
che abbiamo "ATTIVATO". Per fare cio' basta mettere i loro indirizzi negli
appositi registri, che sono:
$dff0e0 = BPL0PT (puntatore bitplane 1)
$dff0e4 = BPL1PT (puntatore bitplane 2)
$dff0e8 = BPL2PT (puntatore bitplane 3)
$dff0ec = BPL3PT (puntatore bitplane 4)
$dff0f0 = BPL4PT (puntatore bitplane 5)
$dff0f4 = BPL5PT (puntatore bitplane 6)
Anche qua si parte dallo zero, dunque si arriva al 5 per definire il sesto.
Certe volte invece si puo' trovare indicato il $dff0e0 con BPL1PT, e di
conseguenza si arriva al 6 per definire il sesto. L'help dell'Asmone parte
da BPL0PT, potete verificare digitando "=c 0e0".
Per visualizzare una figura dunque basta puntare una copperlist con il
BPLCON0 giusto e i colori giusti, poi bisogna PUNTARE anche i bitplanes, ad
esempio cosi':
MOVE.L #BITPLANE0,$dff0e0 ; indirizzo di BITPLANE0 in BPL0PT
MOVE.L #BITPLANE1,$dff0e4 ; BPL1PT
MOVE.L #BITPLANE2,$dff0e8 ; BPL2PT
...
E la figura apparira' magicamente. I bitplanes comunque sono puntati nella
copperlist direttamente, in quanto i puntatori devono essere riscritti ogni
fotogramma.
Non bisogna mai dimenticarsi di mettere nella copperlist i registri "speciali",
che per ora useremo azzerati o comunque col valore normale, altrimenti
rimangono con valore della copperlist del workbench e la visualizzazione puo'
essere disturbata se questi registri non erano azzerati (per esempio il
workbench del kickstart 1.3 ha i MODULI azzerati, mentre il kickstart 2.0
li ha con valori diversi: i giochi e le demo grafiche che vanno sul kick 1.3
e invece visualizzano male le figure sul kick 2.0 spesso sono state fatte
con copperlist dove mancavano i registri dei moduli, il $dff108 e $dff10a,
che su kick1.3 sono a zero, dunque funzionava al collaudo, ma su kick 2.0
sballano la visualizzazione. Per evitare questi problemi dunque in ogni
copperlist e' sempre bene definirsi tutti i registri, anche quelli che non
usiamo; i registri in questione sono:
$dff08e - DIWSTRT, inizio finestra video - normalmente a $2c81
$dff090 - DIWSTOP, fine finestra video - normalmente a $2cc1
$dff092 - DDFSTRT, data fetch start - normalmente a $0038
$dff094 - DDFSTOP, data fetch stop - normalmente a $00d0
$dff102 - BPLCON1, Bitplane control 1 - normalmente a $0000
$dff104 - BPLCON2, Bitplane control 2 - normalmente a $0000
$dff108 - BPL1MOD, modulo bitplanes pari - normalmente a $0000
$dff10A - BPL2MOD, modulo bitplanes dispari - normalmente a $0000
Parleremo di questi registri quando li useremo per creare effetti speciali,
per ora basta ricordarsi di mettere sempre all'inizio della copperlist
questi registri con i valori standard:
COPPERLIST:
dc.w $8e,$2c81 ; DiwStrt
dc.w $90,$2cc1 ; DiwStop
dc.w $92,$0038 ; DdfStart * NOTA: per HIRES 640x256 $003c
dc.w $94,$00d0 ; DdfStop * NOTA: per HIRES 640x256 $00d4
dc.w $102,0 ; BplCon1
dc.w $104,0 ; BplCon2
dc.w $108,0 ; Bpl1Mod
dc.w $10a,0 ; Bpl2Mod
dc.w $100,xxxx ; Bplcon0 - Definiamo i colori e la risuluzione
; Qua possiamo mettere i colori della figura; questo pezzo di
; copperlist lo genera direttamente l'iffconverter KEFCON, la
; salva a parte con un nome a piacere, successivamente si puo'
; includere qua con l'opzione TAGLIA&INCOLLA dell'editor caricandolo
; in un altro buffer, ad esempio.
dc.w $0180,$0010,$0182,$0111,$0184,$0022,$0186,$0222
dc.w $0188,$0333,$018a,$0043,$018c,$0333,$018e,$0154
dc.w $0190,$0444,$0192,$0455,$0194,$0165,$0196,$0655
dc.w $0198,$0376,$019a,$0666,$019c,$0387,$019e,$0766
dc.w $01a0,$0777,$01a2,$0598,$01a4,$0498,$01a6,$0877
dc.w $01a8,$0888,$01aa,$05a9,$01ac,$0988,$01ae,$0999
dc.w $01b0,$06ba,$01b2,$0a9a,$01b4,$0baa,$01b6,$07cb
dc.w $01b8,$0bab,$01ba,$0cbc,$01bc,$0dcd,$01be,$0eef
; Come vedete qua sono definiti tutti i 32 registri colore dell'Amiga,
; infatti ho caricato col KEFCON una figura a 32 colori e questa e'
; la sua PALETTE generata assieme alla figura in RAW.
; Qua si possono fare eventuali effetti video con i WAIT....
dc.w $FFFF,$FFFE ; Fine della copperlist
Questa copperlist e' sufficiente per la visualizzazione di una figura.
Procediamo dunque con il primo esempio di visualizzazione di un PLAYFIELD
con 3 bitplanes, ossia 8 colori. Nel primo esempio di questa lezione,
visualiziamo una figura gia' convertita in formato RAW, ed e' presente sul
disco del corso: per "CARICARE" la figura in memoria esiste una direttiva
dell'ASMONE, chiamata INCBIN, che permette appunto di caricare dal disco un
certo file di dati e copiarlo nel punto del nostro programma dove sta
l'incbin: se per esempio preparassimo una copperlist e la salvassimo come
file, potremmo caricarcela cosi':
COPPERLIST:
incbin "copper1"
Il risultato e' lo stesso che mettere tanti dc.w equivalenti alle word che
stanno nel file copper1. Nel nostro caso carichiamo l'immagine sotto una
label PIC:
PIC:
incbin "amiga.320*256*3"
La figura comunque non e' in formato TESTO, ma proprio in byte che compongono
i bitplane: provate a caricarla in un buffer di testo e noterete che non si
tratta di un testo.
Come notate il nome della figura e' dato secondo le caratteristiche della
figura stessa; e' bene scegliere nomi per le figure che rispecchino le
sue caratteristiche per non rischiare di dimenticarsi di che dimensione e
quanti bitplanes hanno le figure RAW che convertite. Dalla lunghezza di
questa immagine raw pero' si puo' dedurre la risoluzione e il numero di
bitplanes: e' lunga 30720 bytes, ossia 40*256*3 (40 bytes per linea*256 linee,
moltiplicato 3 bitplanes fa 30720). Bastera' dunque dire al COPPER che
la figura si trova alla label PIC, e il gioco e' fatto.
Comunque per puntare i bitplanes senza rischi di errore bisogna mettere i
puntatori nella copperlist. Infatti i puntatori dei bitplanes possono
contenere una word ciascuno, ossia la meta' di un indirizzo (infatti un
indirizzo e' lungo una longword! es $00020000). Se usiamo il processore
possiamo anche caricare 2 registri di una word con un solo move.l
MOVE.L #BITPLANE00,$dff0e0 ; BPL0PT
MOVE.L #BITPLANE01,$dff0e4 ; BPL1PT (2 word piu'avanti di $dff0e0)
Ma nella copperlist come noto ogni move puo' essere di una WORD solamente:
MOVE.W #$123,$dff180 diventa dc.w $180,$123
Nel caso dei puntatori ai bitplanes allora dovremmo "SPEZZARE" ogni indirizzo
lungo una LONGWORD in 2 words per poter fare cosi':
MOVE.W #BITPL,$dff0e0 ; BPL0PTH (H=word ALTA dell'indirizzo)
MOVE.W #ANE00,$dff0e2 ; BPL0PTL (L=word BASSA dell'indirizzo)
MOVE.W #BITPL,$dff0e4 ; BPL1PTH
MOVE.W #ANE01,$dff0e6 ; BPL1PTL
BPLxPTH = BitPLane x PoinTer High word , puntatore word alta
BPLxPTL = BitPLane x PoinTer Low word , puntatore word bassa
Abbiamo spezzato BITPLANE00 (lungo una longword) in 2 words BITPL e ANE00, e
abbiamo ottenunto lo stesso risultato del MOVE.L con 2 MOVE.W, adatti alla
copperlist, dove tradurremmo cosi':
dc.w $e0,BITPL ; BPL0PTH \primo bitplane
dc.w $e2,ANE00 ; BPL0PTL /
dc.w $e4,BITPL ; BPL1PTH \secondo bitplane
dc.w $e6,ANE01 ; BPL1PTL /
(infatti $dff0e0 si traduce in copperlist in $e0, ecc.)
Questa divisione si dice DIVISIONE DI UNA LONGWORD IN WORD ALTA E WORD BASSA,
dove la word ALTA e' quella a sinistra, BITPL, quella bassa e' quella destra,
qua ANE00. Facciamo un esempio con indirizzi veri:
Il bitplane0 si trova a $23400, il bitplane1 a $25c00
dc.w $e0,$0002 \primo bitplane (word alta) \$00023400
dc.w $e2,$3400 / (word bassa) /
dc.w $e4,$0002 \secondo bitplane (word alta) \$00025c00
dc.w $e6,$5c00 / (word bassa) /
Vi starete gia' immaginando che per mettere gli indirizzi giusti nella
copperlist sia necessario controllare a che indirizzo sta la figura e cambiare
a mano le word in questione. Invece basta una piccola routine di una decina
di istruzioni per risparmiarci il lavoro di "SPEZZARE" gli indirizzi e
metterli nella copperlist al punto giusto. Questa routine si puo' usare per
PUNTARE qualsiasi figura di qualsiasi dimensione con il numero di bitplanes
che vogliamo, basta cambiare i parametri!!! Il trucco sta nell'uso di una
istruzione particolare del 68000, lo SWAP, che in inglese significa SCAMBIA,
ed in effetti SCAMBIA le 2 words di una longwords facendo diventare BASSA
quella ALTA e viceversa:
MOVE.L #CANETOPO,d0 ; in d0 mettiamo la longword CANETOPO
SWAP d0 ; SCAMBIAMO LE WORDS: il risultato e' che
; in d0 abbiamo TOPOCANE!!!!
Questo comando funziona solo sui registri DATI.
Allo stesso modo $00023400 viene scambiato in 34000002.
Vediamo la routine:
MOVE.L #PIC,d0 ; in d0 mettiamo l'indirizzo della PIC,
; ossia dove inizia il primo bitplane
LEA BPLPOINTERS,A1 ; in a1 mettiamo l'indirizzo dei
; puntatori ai planes della COPPERLIST
MOVEQ #2,D1 ; numero di bitplanes -1 (qua sono 3)
; per eseguire il ciclo col DBRA
POINTBP:
move.w d0,6(a1) ; copia la word BASSA dell'indirizzo del plane
; nella word giusta nella copperlist
swap d0 ; scambia le 2 word di d0 (es: 1234 > 3412)
; mettendo la word ALTA al posto di quella
; BASSA, permettendone la copia col move.w!!
move.w d0,2(a1) ; copia la word ALTA dell'indirizzo del plane
; nella word giusta nella copperlist
swap d0 ; scambia le 2 word di d0 (es: 3412 > 1234)
; rimettendo a posto l'indirizzo.
ADD.L #40*256,d0 ; Aggiungiamo 10240 ad D0, facendolo puntare
; al secondo bitplane (si trova dopo il primo)
; (cioe' aggiungiamo la lunghezza di un plane)
; Nei cicli seguenti al primo faremo puntare
; al terzo, al quarto bitplane eccetera.
addq.w #8,a1 ; a1 ora contiene l'indirizzo dei prossimi
; bplpointers nella copperlist da scrivere.
dbra d1,POINTBP ; Rifai D1 volte POINTBP (D1=num of bitplanes)
dove cambiamo questa parte di copperlist:
BPLPOINTERS:
dc.w $e0,$0000,$e2,$0000 ;primo bitplane (BPL0PT)
dc.w $e4,$0000,$e6,$0000 ;secondo bitplane (BPL1PT)
dc.w $e8,$0000,$ea,$0000 ;terzo bitplane (BPL2PT)
La routine non fa altro che prendere l'indirizzo del bitplane, copiarne la word
BASSA nella copperlist alla word dopo il $e2, ossia il puntatore della word
bassa dell'indirizzo (che si trova 6 bytes dopo BPLPOINTERS, infatti viene
usato un move.w d0,6(a1), dove in a1 c'e' l'indirizzo di BPLPOINTERS).
Dopo aver sistemato la word bassa, con lo SWAP scambiamo word bassa con word
alta, permettendo con un successivo move.w d0,2(a1) di copiare la word ALTA,
anziche' quella bassa, nella word dopo il $e0, ossia il puntatore della word
alta del primo bitplane, che si trova, appunto, 2 bytes dopo BPLPOINTERS.
A questo punto abbiamo PUNTATO il primo bitplane: (es. a $23400)
BPLPOINTERS:
dc.w $00e0,$0002,$00e2,$3400 ; BPL0PT - primo bitplane * PUNTATO *
dc.w $00e4,$0000,$00e6,$0000 ; BPL1PT - secondo bitplane
dc.w $00e8,$0000,$00ea,$0000 ; BPL2PT - terzo bitplane
^ ^
| |
2(a1) 6(a1) ; notare l'uso degli offset per
; inserire le word nel punto
; giusto.
NOTA: con il move.w d0,x(a1) copiamo la word bassa della long in d0 perche'
la copia avviene in questo modo:
move.w #CANETOPO,2(a1) ; in 2(a1) viene copiato TOPO
Successivamente rimettiamo a posto l'indirizzo con un atro SWAP, per poter
passare al bitplane successivo con un ADD.L #LUNGHEZZABITPLANE,d0.
Con un addq.w #8,a1 passiamo a puntare il secondo bitplane, infatti se
in a1 c'era l'indirizzo di BPLPOINTERS, aggiungendo 8 bytes (4 words) passiamo
in questo punto:
BPLPOINTERS:
dc.w $00e0,$0002,$00e2,$3400 ; BPL0PT - primo bitplane * PUNTATO *
a1PUNTAQUA:
dc.w $00e4,$0000,$00e6,$0000 ; BPL1PT - secondo bitplane
dc.w $00e8,$0000,$00ea,$0000 ; BPL2PT - terzo bitplane
Ripetiamo quindi con un loop "DBRA d1,label" questa routine, in questo caso
3 volte, per puntare 3 bitplanes. (Come ricorderete al loop DBRA bisogna
mettere nel registro che conta i cicli il numero richiesto meno 1, che e'
il primo che non viene contato: qua infatti in d1 viene messo il valore 2.
Questa routine ha la struttura classica delle routines che generano effetti
col copper, dunque capirla esattamente e' fondamentale. Una routine simile
la avete gia' trovata in Lezione3h.s, in quel caso c'erano dei loop DBRA
per cambiare 29 wait della copperlist.
Caricate Lezione4a.s per vedere in pratica l'esecuzione di questa routine
PUNTABITPLANES con il DEBUG.
A questo punto mancano solo due "RIFINITURE" al nostro listato per evitare
problemi nel visualizzare un'immagine: un paio di istruzioni per disabilitare
il chipset AGA, che rende compatibile con l'Amiga 1200 e 4000 il nostro
lavoro, e qualche altra linea nella copperlist per far sparire gli sprites,
che altrimenti girovagherebbero a caso per il nostro disegno provocando
disturbi intermittenti. Per diasbilitare l'AGA bastano queste 2 linee:
move.w #0,$dff1fc ; FMODE - Disattiva l'AGA
move.w #$c00,$dff106 ; BPLCON3 - Disattiva l'AGA
E se volete proprio essere sicuri potete aggiungere questa: (palette sprite)
move.w #$11,$dff10c ; BPLCON4 - Resetta palette Sprite
Basta eseguirle dopo aver puntato la nuova copperlist, mentre per fermare
gli sprites ubriachi basta puntare i loro puntatori a ZERO:
dc.w $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000
dc.w $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
dc.w $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
dc.w $13e,$0000
(Nota: I registri da $dff120 a $dff13e si chiamano SPR0PT,SPR1PT... SPR7PT.)
Parleremo degli sprites in seguito, per ora basta che li togliate di mezzo
aggiungendo con un semplice COPY+INSERT (Amiga+b+c+i) questo pezzo di
testo alla vostra copperlist. Gli sprites non apparivano con i bitplanes
azzerati, mentre accendendo anche un solo bitplane gli sprite si fanno vivi.
Finalmente potete vedere in pratica come viene visualizzata una figura
caricandovi Lezione4b.s in un buffer di testo Fx a piacere.
Avete provato ad aggiungere effetti copper alla figura??? Caricate l'esempio
Lezione4c.s per una fusione di alcuni degli effetti gia' visti.
Avete capito ora l'importanza del WAIT in una copperlist con dei bitplane?
Ci puo' far cambiare i colori (e non solo) anche ogni linea!
Non ci resta che visualizzare un'immagine fatta da voi anziche' quella
nel corso. Per fare cio' dovete disporre di una figura in 320x256 a 8 colori,
se non la avete fatevela anche sommariamente con un programma di disegno,
oppure convertite con ADPRO o altro programma una figura a piu' colori
in quel formato. Disponendo di quella immagine in formato IFF (su un disco
formattato) con il nome che preferite, immaginiamo che si chiami "FIGURA",
bisogna convertirla in formato RAW, ossia nel formato REALE dei bitplanes
leggibili dal Copper, caricandola con l'iffconverter in questo disco, il
"KEFCON", che ha molte funzioni di cui pero' parleremo in seguito.
Leggete queste istruzioni prima di caricarlo:
Il converter e' programmato in assembler hardware, dunque non supporta il
multitasking e non si puo' "spostare" la sua finestra per leggere la lezione,
dato che la sua finestra e' una copperlist propria e non di sistema, che pero'
e' compatibile AGA e non crea problemi (I buoni vecchi programmatori!).
Preparatevi prima la figura in un disco formattato, che poi inserirete dopo
aver caricato il KEFCON nel df0: (disk drive interno) o nel df1: (disk drive
esterno) se lo avete.
Una volta caricato, vi apparira' un quadro comandi in alto, con delle opzioni,
quelle che ci interessano sono: (vi faccio uno schema dei "PULSANTI")
------ ----------
| SAVE | | IFF ILBM |
------ ----------
------ ----------
| LOAD | | READ DIR |
------ ----------
------
| QUIT |
------
------------------------------------
| QUA C'E UNA FINESTRELLA A STRISCIA | -Dove si deve scrivere il nome del file
------------------------------------
LOAD, SAVE e QUIT significano naturalmente CARICA, SALVA ed ESCI DAL PROGRAMMA
READ DIR serve a visualizzare nella finestra a destra la lista dei file che
sono nel disco, ossia la sua directory.
IFF ILBM e' un pulsante che indica il tipo di file che si puo' salvare o
caricare, in questo caso e' giustamente ad IFF ILBM perche' dobbiamo caricare
una figura iff; successivamente per salvarla in RAW bastera' clickare su
quel pulsante, il quale si cambiera' in "RAW NORM", e la figura sara'
salvata come RAW; tra i possibili formati ci sono anche SPRITE e RAW BLIT,
quelli li useremo in seguito. Per ora ci interessano solo "RAW NORM" e "COPPER"
dove con COPPER si salva la PALETTE dei colori direttamente in un file di
testo con i DC.W da inserire nella nostra copperlist!
Per fare la conversione, clickate sulla finestrella a striscia in basso a
sinistra dove appare la scitta "allocated GFX-buffer" e si cambiera' in "df0:"
ossia il drive interno. Se avete inserito il disco con la figura iff in df0:
lasciatelo, oppure indicate il nome del drive dove avete messo il disco (ad
esempio df1:, oppure dh0: per l'hardisk). Per leggere la lista dei file
premete READ DIR, e potrete selezionare la vostra figura clickando col mouse
sopra il suo nome e premendo il pulsante "LOAD".
Vedrete a questo punto comparire la figura, che potete vedere per intero
scorrendola in alto e basso con i tasti cursore.
Notate che una volta caricata la figura appaiono le sue caratteristiche
nella finestrella a striscia: "bitplane $2800, total $7800". Infatti ogni
singolo bitplane e' lungo $2800 (ossia 10240 decimale, 40*256), e in totale
la figura RAW e' lunga $7800, ossia 30720 (40*256*3).
Sopra sono indicate anche le altre caratteristiche:
WIDTH: 320 (larghezza), HEIGHT 256 (LUNGHEZZA), DEPTH 3 (NUMERO BITPLANES)
Ora clickate sul pulsante "IFF ILBM" facendolo cambiare in "RAW NORM"; per
salvare la pic in RAW premete un'altra volta col tasto sinistro sulla
finestrella a striscia e definite il nome, ad esempio "df0:FIGURA.RAW" e
premete il pulsante "SAVE". Il RAW da includere con l'INCBIN e' salvato!
Ora manca solo la palette dei colori per la nostra COPPERLIST; per selezionare
il modo 'salvataggio palette' clickate 5 volte sul gadget "RAW NORM", ossia
fino a che non si cambia in "COPPER". Per salvarla ripetete l'operazione di
clickaggio della finestrella a striscia, dategli un nome, es: "df0:FIGURA.S",
e premete il pulsante "SAVE". A questo punto potete anche uscire, perche'
abbiamo salvato sia il .RAW che il testo della palette in dc.w da includere
nella nostra copperlist.
Per visualizzarvi la figura, caricate l'esempio "Lezione4b.s" e fate queste 2
sostituzioni: cambiate il nome della figura da caricare mettendoci la vostra,
e inserite la palette della vostra figura eliminando quella preesistente:
PIC:
incbin "amiga.320*256*3"
lo potete cambiare in:
PIC:
incbin "df0:figura.raw"
oppure, scrivendo "v df0:" dalla linea comandi basta un:
PIC:
incbin "figura.raw"
Per la palette potete fare in 2 modi: o caricate "FIGURA.S" in un altro
biffer e poi lo copiate con Amiga+b+c+i, oppure potete usare il comando
dell'Asmone "I", ossia INSERT, che inserisce un testo nel punto in cui
vi trovate col cursore prima di premere ESC per passare alla linea comandi.
Comunque facciate, togliete la vecchia palette con il CUT (TAGLIA) dell'editor:
Amiga+b per selezionare il blocco, Amiga+x per eliminarlo.
Ha funzionato?? Spero di si, altrimenti significa che avete sbagliato qualche
passaggio, pena la ripetizione di tutta l'operazione.
Per continuare in bellezza ora proviamo a visualizzare una figura a 32 colori:
basta che disponiate della consueta figura in 320x256, questa volta a 32
colori (se proprio non la avete caricate il DeLuxe Paint e "schizzate" qualche
oscenita'). Convertitela come avete fatto per la figura precedente, questa
volta noterete che dopo il caricamento le caratteristiche cincideranno con le
previsioni: "bitplane $2800, total $c800", infatti ogni bitplane e' sempre di
$2800 bytes, mentre il totale e' $c800, ossia 51200 ($2800*5), essendo una
figura a 32 colori composta di 5 bitplanes. Salvate il .RAW e la palette,
ad esempio con nomi come FIGURA32.RAW e FIGURA32.s.
Per visualizzarla dovrete fare al sorgente i due cambiamenti di prima, ossia
far caricare la nuova figura dall'incbin e sostituire la vecchia palette con
quella nuova (che come noterete e' piu' lunga coinvolgendo tutti i 32 registri
colore). In piu' dovete cambiare il numero di bitplanes nella routine di
puntamento e aggiungere i bitplanes mancanti alla copperlist:
MOVE.L #PIC,d0 ; in d0 mettiamo l'indirizzo della PIC,
LEA BPLPOINTERS,A1 ; in a1 i puntatori in COP
**-> MOVEQ #4,D1 ; numero di bitplanes -1 (qua sono 5!!!!!)
; per eseguire il ciclo col DBRA
POINTBP:
....
1) Cambiate il MOVEQ #2,d1 in MOVEQ #4,d1, ossia mentre prima eseguivamo 3
cicli DBRA per 3 bitplanes (3-1=2), ora eseguiamo 5 cicli (5-1=4) per 5
bitplanes. Ma allora bisogna aggiungere i puntatori di bitplanes mancanti
nella copperlist:
BPLPOINTERS:
dc.w $e0,$0000,$e2,$0000 ;primo bitplane - BPL0PT
dc.w $e4,$0000,$e6,$0000 ;secondo bitplane - BPL1PT
dc.w $e8,$0000,$ea,$0000 ;terzo bitplane - BPL2PT
dc.w $ec,$0000,$ee,$0000 ;quarto bitplane (AGGIUNTO ORA!)
dc.w $f0,$0000,$f2,$0000 ;quinto bitplane (AGGIUNTO ORA!)
Ultima e piu' importante modifica bisogna "accendere" 5 bitplanes anziche' 3,
questo lo si puo' fare modificando il $dff100 (bplcon0) nella copperlist:
; 5432109876543210
dc.w $100,%0101001000000000 ; bits 14,12 accesi!! (5 = %101)
Assemblando il tutto dovrebbe apparire la figura a 32 colori.
Da questi due esempi potete intuire facilmente come visualizzare immagini
a 2,4 e 16 colori! basta cambiare il numero di loop nella routine che punta i
bitplanes e sistemare i bit giusti in $dff100 (BPLCON0).
Vediamo ora di visualizzare una figura in EHB a 64 colori e una in HAM a 4096
colori, attivando i due modi grafici speciali.
Partiamo da quella in HAM: fatevi una figura in 320x256 in HAM, oppure cercate
una delle tante figure ham che si trovano spesso nei dischi di riviste o nei
dischi di immagini "SEXY", che sono per lo piu' in HAM, dato che la fedelta'
e' importantissima per l'immagine di una donna nuda. Credo anzi che sia piu'
piacevole visualizzare una donna nuda che un cesto di frutta.
Caricate come da copione la figura in HAM 320x256 col KEFCON e salvate il RAW
e la COPPERLIST.
Purtroppo il KEFCON ha un errore di programmazione per cui quando vengono
caricate su A4000 figure a 6 bitplanes, siano HAM o EHB, si provoca una specie
di "spappolamento" dei nueri e dei segni di punteggiatura (,.:) del quadro di
comando, (sull'Amiga500/2000/600 funziona invece!) per cui potete vedere
correttamente solo le parole, ma non e' certo un problema, in quanto basta
clickare sulla finestrella a striscia ed aggiungere un .RAW, per esempio, al
nome della PIC che e' visibile, poi un .s per salvare la copperlist.
Le modifiche da fare sono l'aggiunta degli ultimi puntatori al bitplane 6
in copperlist, la sostituzione della palette e il settaggio del numero di cicli
della routine di puntamento a 6:
BPLPOINTERS:
dc.w $e0,$0000,$e2,$0000 ;primo bitplane - BPL0PT
dc.w $e4,$0000,$e6,$0000 ;secondo bitplane - BPL1PT
dc.w $e8,$0000,$ea,$0000 ;terzo bitplane - BPL2PT
dc.w $ec,$0000,$ee,$0000 ;quarto bitplane - BPL3PT
dc.w $f0,$0000,$f2,$0000 ;quinto bitplane - BPL4PT
dc.w $f4,$0000,$f6,$0000 ;sesto bitplane (AGGIUNTO ORA!)
**-> MOVEQ #5,D1 ; numero di bitplanes -1 (qua sono 6!!!!!)
; per eseguire il ciclo col DBRA
POINTBP:
...
Nonche' il BPLCON0:
; 5432109876543210
dc.w $100,%0110101000000000 ; ---> 6 plane in HAM lowres (4096 colori)
; BIT 11 settato = HAM!
Il funzionamento teorico dell'HAM sara' affrontato meglio in seguito.
*
Per visualizzare una immagine in Extra Half Bright, invece, convertitene una
col KEFCON, fatela caricare dall'incbin, sostituite la palette, lasciate
puntare 6 bitplanes alla routine e azzerate il bit 11 del bplcon0:
; 5432109876543210
dc.w $100,%0110001000000000 ; ---> 6 plane in EHB lowres (64 colori)
; BIT 11 azzerato = Extra Half Bright
NOTA: Il modo EHB ha 64 colori, ma non sono tutti e 64 selezionabili
liberamente, in quanto l'Amiga ha solo 32 registri colore; gli altri 32
colori sono come i primi 32 ma piu' scuri, a "MEZZA LUCE", ossia "HALF BRIGHT".
Ora che sappiamo visualizzare delle figure, vediamo che effetti si possono fare
con i registri di scorrimento. Caricate la LEZIONE5.TXT con "r"